ホームに戻る
出典 :
New-Item (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn Windowsでシンボリックリンクを作る - Developers.IO Windowsのシンボリックリンクとジャンクションとハードリンクの違い - @IT Windowsのハードリンクとジャンクションとシンボリックリンクについて #Windows - Qiita シンボリックリンクの使い方と落とし穴 #Windows - Qiita (事例)ネットワークフォルダーをシンボリックリンクで参照すると Visual C++ が内部エラーを起こす - 標準愚痴出力
関連 :
ネットワークドライブ
目次 :

Windowsで使用できるリンク

WindowsではUNIX/Linux系OSと同様のリンク機能を利用することができるが、それぞれ機能や制約が異なる。
なお、「ショートカット(.lnk)」については割愛する。

ハードリンク

同一ボリューム(ドライブ)内のファイルに対して、複数のパスを作成するという機能。
これにより、同一のファイルを異なるパスでアクセスすることができる。
この新旧のパス同士に優劣は無く、元々(ハードリンクを作成する前)のパスを削除しても、ハードリンクとして作成したパスからファイルを参照できる(ファイルは削除されない)。
(ひとつのファイルを指す)すべてのパス(作成されたハードリンクを含む)が削除されると、対象のファイルが削除される。
存在するファイルへのアクセス経路を作成するという性質上、存在しないファイルへのリンクを作成することはできない。
後述のジャンクション、シンボリックリンクは「実パスを作成しない」ことから、ハードリンクに対して「ソフトリンク」と呼ばれる。

ジャンクション

同一のローカルPC上にあるフォルダに対して、別のパスを作成するという機能。
本来のパスと同様、ジャンクションとして作成されたパスでもフォルダへのアクセスが可能となる。
リンク先のフォルダを削除すると「リンク先不明」となる。逆に言えば、存在しないフォルダへのジャンクションも作成可能である。

シンボリックリンク

ジャンクションとは異なり、ファイル、フォルダのいずれにも別のパスを作成可能。
また、絶対パスに加えて相対パスを用いることができ、ネットワーク上の共有フォルダへのパスも作成できる。
但し、作成時は管理者権限が必要である。

比較

ハードリンク ジャンクション シンボリックリンク
対象オブジェクト ファイル フォルダ ファイル、フォルダ
パスの指定 - 絶対パス 絶対パス、相対パス
設定可能範囲 同一ドライブ 同一PC(ローカル) 同一PC(ローカル)、
ネットワーク上の共有フォルダ
存在しない
オブジェクトへのリンク
作成不可 作成可能 作成可能
必要な権限 一般ユーザ 一般ユーザ 管理者
エクスプローラー
上の表示
通常のファイルと同様 ショートカットアイコンあり ショートカットアイコンあり

リンクの作成

手順 (コマンドプロンプト)

コマンドプロンプトを 管理者権限で 開き、mklink コマンドを入力する。
rem シンボリックリンク C:/here/SLink が //Somewhere/location を指すようにする >mklink /D "C:/here/SLink" "//Somewhere/location"
コマンド mklink
オプション
(作成するリンクの種類)
/D
(ディレクトリのシンボリックリンク)
参照元 "C:/here/SLink"
参照先 "//Somewhere/location"

オプション

(なし)ファイルのシンボリックリンクを作成
/Dディレクトリのシンボリックリンクを作成
/Hハードリンクを作成
/Jジャンクションを作成

手順 (PowerShell)

PowerShellを 管理者権限で 開き、New-Item コマンドを入力する。
# シンボリックリンク C:/here/SLink が //Somewhere/location を指すようにする >New-Item -Path 'C:/here' -Name SLink -Value '//Somewhere/location' -ItemType SymbolicLink
コマンド New-Item
-Path
(作成する先(ディレクトリ))
'C:/here'
-Name
(作成するアイテム名 ⇒ 参照元)
SLink
-Value
(設定する値 ⇒ 参照先)
'//Somewhere/location'
-ItemType
(作成するアイテムの種類)
SymbolicLink
(シンボリックリンク)

-ItemType

SymbolicLinkシンボリックリンク
HardLinkハードリンク
Junctionジャンクション

リンクを実パスに変換

一部のアプリケーション(Subversionなど)では、処理対象(引数)にシンボリックリンク(またはジャンクション)を指定した場合にエラーとなることがある。
その場合、リンクが指し示す先(ターゲット)を取得し、ターゲットを処理対象とする。

手順 (PowerShell)

# C:/here/SLink (シンボリックリンク)が //Somewhere/location (実パス)を指す場合 # C:/here/SLink をアイテムとして取得 $sLink = Get-Item -Path 'C:/here/SLink' # C:/here/SLink のリンク種別を取得 $sLink.LinkType # SymbolicLink が返る(シンボリックリンク) # C:/here/SLink のターゲットを取得 $sLink.Target # UNC\Somewhere\location が返る(UNCパス)